package com.tcc.etec.mecashow.bdados;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import com.tcc.etec.mecashow.objetos.Nivel;
import com.tcc.etec.mecashow.objetos.Pergunta;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;


// DAO - Data Access Object
// Objeto de acesso aos dados de perguntas
public class PerguntaDao {

	private SQLiteDatabase database;
	
	// Unica instancia da classe PerguntaDao  
	private static PerguntaDao instance;
	
	// Construtor privado, s� pode ser criado dentro da classe PerguntaDao
	private PerguntaDao(Context context) {
		DatabaseCreator creator = new DatabaseCreator(context);
		database = creator.getDatabase();
	}
	
	// Retorna o unico objeto PerguntaDao da aplica��o 
	public static PerguntaDao getInstance(Context context){
		if(instance == null){
			instance = new PerguntaDao(context);
		}
		return instance;
	}
	
	
	public List<Pergunta> listarPerguntasPeloNivel(int nivelId){
		// Consulta usada no banco de dados
		String sql;
		if(new Random().nextBoolean()){
			sql = "SELECT P.ID_PERGUNTA, P.QUESTAO, P.OPCAO1, P.OPCAO2, P.OPCAO3, P.OPCAO_CORRETA, P.RANDOM, N.ID_NIVEL, N.DESCRICAO, N.PONTOS FROM TB_PERGUNTAS P, TB_NIVEL N WHERE N.ID_NIVEL = P.ID_NIVEL AND N.ID_NIVEL = ? ORDER BY RANDOM ASC LIMIT 10";
		}else{
			sql = "SELECT P.ID_PERGUNTA, P.QUESTAO, P.OPCAO1, P.OPCAO2, P.OPCAO3, P.OPCAO_CORRETA, P.RANDOM, N.ID_NIVEL, N.DESCRICAO, N.PONTOS FROM TB_PERGUNTAS P, TB_NIVEL N WHERE N.ID_NIVEL = P.ID_NIVEL AND N.ID_NIVEL = ? ORDER BY RANDOM DESC LIMIT 10";
		}
		List<Pergunta> perguntas = new ArrayList<Pergunta>(); // objeto do tipo lista para armazenar as perguntas
		
		Cursor cursor = database.rawQuery(sql, new String[] {String.valueOf(nivelId)}); // executa a busca no banco de dados e armazena o resultado no cursor
		cursor.moveToFirst(); // move o cursor para a primeira linha
		
		while(!cursor.isAfterLast()){ // loop q varre o cursor até a ultima linha
			Pergunta pergunta = new Pergunta(); // cria um objeto do tipo pergunta 
			
			pergunta.setId(cursor.getInt(0));
			pergunta.setTexto(cursor.getString(1));
			
			List<String> opcoes = new ArrayList<String>();
			opcoes.add(cursor.getString(2));
			opcoes.add(cursor.getString(3));
			opcoes.add(cursor.getString(4));
			opcoes.add(cursor.getString(5));
			
			pergunta.setListaOpcoes(opcoes);
			pergunta.setOpcaoCorreta(cursor.getString(5));
			pergunta.setRandom(cursor.getInt(6));
			
			Nivel nivel = new Nivel();
			nivel.setId(cursor.getInt(7));
			nivel.setDescricao(cursor.getString(8));
			nivel.setPontos(cursor.getInt(9));
			
			pergunta.setNivel(nivel);
			
			perguntas.add(pergunta);
			
			cursor.moveToNext();
		}
		
		
		return perguntas;
	}
	
	public void atualizarUsoDaPergunta(Pergunta pergunta){
		String where = "ID_PERGUNTA = ?";
		ContentValues values = new ContentValues();
		values.put("RANDOM", pergunta.getRandom());
		database.update("TB_PERGUNTAS", values, where, new String[] { String.valueOf(pergunta.getId()) });		
	}
	
}
